import ast
import logging
from typing import Optional, List, Set

from 程序核心代码.ast节点.节点定义.基础定义.ast节点基础定义 import ast节点基础模型
from 程序核心代码.ast节点.节点定义.基础定义.节点状态管理 import 节点状态类型

logger = logging.getLogger(__name__)

class 条件ast节点基础模型(ast节点基础模型):
    """条件节点类，用于处理if-elif-else条件控制流"""
    
    def __init__(self, ast节点: ast.If, 节点管理器,
                 节点位置: Optional[List] = None, 上级节点: Optional['ast节点基础模型'] = None):
        super().__init__(ast节点, 所属节点模型管理器, "条件ast节点基础模型", "控制流", 节点位置, True, 上级节点)
        
        # 条件相关属性
        self.条件表达式 = None
        self.条件主体: Set[ast节点基础模型] = set()
        self.否则主体: Set[ast节点基础模型] = set()
        self.当前分支 = "主体"  # "主体" 或 "否则"
        
        # 添加接口
        self.添加接口("控制流", "输入", "控制输入")
        self.添加接口("控制流", "输出", "主体输出")
        self.添加接口("控制流", "输出", "否则输出")
        self.添加接口("数据流", "输入", "条件输入")
        
    def 节点数据解析(self) -> None:
        """解析节点数据"""




        
        try:
            # 解析条件表达式
            self.条件表达式 = self.所属节点模型管理器.创建节点(self.ast节点.test)
            if not self.条件表达式:
                self.添加错误信息("条件表达式创建失败")
                return
                
            # 解析主体部分
            for 语句 in self.ast节点.body:
                节点 = self.所属节点模型管理器.创建节点(语句, 上级节点=self)
                if 节点:
                    self.条件主体.add(节点)
                    
            # 解析else部分
            for 语句 in self.ast节点.orelse:
                节点 = self.所属节点模型管理器.创建节点(语句, 上级节点=self)
                if 节点:
                    self.否则主体.add(节点)
                    
            # 更新节点显示名称
            self.节点标题名称 = "if条件控制"
            
        except Exception as e:
            logger.error(f"条件节点数据解析失败: {str(e)}")
            self.添加错误信息(f"数据解析失败: {str(e)}")
            
    def 执行条件分支(self) -> None:
        """执行条件分支"""
        try:
            if not self.条件表达式:
                self.添加错误信息("条件表达式未定义")
                return
                
            # 获取条件值
            条件值 = self.条件表达式.获取变量值()
            if 条件值 is None:
                self.添加错误信息("条件值获取失败")
                return
                
            # 根据条件选择执行分支
            if 条件值:
                self.当前分支 = "主体"
                for 节点 in self.条件主体:
                    节点.执行()
            else:
                self.当前分支 = "否则"
                for 节点 in self.否则主体:
                    节点.执行()
                    
            self.状态管理器.更新状态(节点状态类型.已完成)
            
        except Exception as e:
            logger.error(f"条件分支执行失败: {str(e)}")
            self.添加错误信息(f"执行失败: {str(e)}")
            
    def 创建独立节点(self) -> None:
        """创建独立的AST节点"""
        self.ast节点 = ast.If(
            test=ast.Constant(value=True),
            body=[ast.Pass()],
            orelse=[ast.Pass()]
        )
        
    def __str__(self) -> str:
        """返回条件节点的字符串表示"""
        return f"{self.获取属性("节点名称")}(当前分支={self.当前分支})" 